package com.wanxi.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wanxi.dao.ContactDao;
import com.wanxi.dto.ResultDTO;
import com.wanxi.model.Contact;
import com.wanxi.service.ContactService;
import com.wanxi.util.CreateOnlyID;
import com.wanxi.util.JsonCopy;
import com.wanxi.vo.ContactVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @author Chengbo Zhang
 */
@Service
@Transactional
public class ContactServiceImpl implements ContactService {
    @Autowired
    ContactDao contactDao;
    @Autowired
    CreateOnlyID createOnlyId;
    @Override
    public ResultDTO findAllContact() {
        QueryWrapper<Contact> queryWrapper=new QueryWrapper<Contact>()
                .orderByDesc("id");
        List<Contact> list=contactDao.selectList(queryWrapper);
        if(list.size()>0){
            return ResultDTO.getDTO(list.size(),list);
        }
        return ResultDTO.builder().data(list).msg("no data").count(0).code(1).build();
    }

    @Override
    public ResultDTO findContactById(ContactVO contactVO) {
        Contact contact= JsonCopy.copy(contactVO, Contact.class);
        Contact c=contactDao.selectById(contact.getId());
        if(c!=null){
            return ResultDTO.getDTO(1,c);
        }
        return ResultDTO.builder().count(0).msg("error").code(1).build();
    }

    @Override
    public ResultDTO updateEnable(ContactVO contactVO) {
        Contact contact= JsonCopy.copy(contactVO, Contact.class);
        contact.setUpdateTime(new Date());
        int i=contactDao.updateById(contact);
        if(i==1){
            return ResultDTO.getDTO(i,contactVO);
        }
        return ResultDTO.builder().data(contactVO).count(0).code(1).msg("error").build();
    }

    @Override
    public ResultDTO addContact(ContactVO contactVO) {
        Contact contact= JsonCopy.copy(contactVO, Contact.class);
        contact.setId(createOnlyId.createId());
        contact.setEnable(1);
        contact.setUpdateTime(new Date());
        contact.setCreateTime(new Date());
        int i=contactDao.insert(contact);
        if(i==1){
            return ResultDTO.getDTO(i,contactVO);
        }
        return ResultDTO.builder().code(1).count(0).msg("error").data(contactVO).build();
    }

    @Override
    public ResultDTO deleteContact(ContactVO contactVO) {
        Contact contact= JsonCopy.copy(contactVO, Contact.class);
        int i=contactDao.deleteById(contact);
        if(i==1){
            return ResultDTO.getDTO(i,contactVO);
        }
        return ResultDTO.builder().count(0).data(contactVO).code(1).msg("error").build();
    }

    @Override
    public ResultDTO updateContact(ContactVO contactVO) {
        Contact contact= JsonCopy.copy(contactVO, Contact.class);
        contact.setUpdateTime(new Date());
        int i=contactDao.updateById(contact);
        if(i==1){
            return ResultDTO.getDTO(i,contactVO);
        }
        return ResultDTO.builder().data(contactVO).count(0).code(1).msg("error").build();

    }
}
